#include "httplib.h"
#include <string>

class test
{
public:
    test()
    {
        _server_ip = "0.0.0.0";
        _server_port = 8080;
    }
    ~test()
    {
    }
    bool run()
    {
        svr.Get("/hi", Hello); // 注册一个针对/hi的Get请求的处理函数映射关系
        svr.Get(R"(/numbers/(\d+))", Numbers);
        svr.Post("/multipart", Multipart);
        // svr.listen("0.0.0.0", 8080);
        svr.listen(_server_ip.c_str(),_server_port);

        return true;
    }

private:
    static void Hello(const httplib::Request &req, httplib::Response &res)
    {
        std::cout << "fail!!!!!!!" << std::endl;

        // 对响应报文设置正文，text/plain：表示文本文件
        res.set_content("Hello World!", "text/plain");
        // 设置状态码
        res.status = 200;
    }
    static void Numbers(const httplib::Request &req, httplib::Response &res)
    {
        auto num = req.matches[1]; // 数组0里存放的是整体path，往后下标保存的是捕捉的数据
        res.set_content(num, "text/plain");
        res.status = 200;
    }
    static void Multipart(const httplib::Request &req, httplib::Response &res)
    {
        auto ret = req.has_file("file");
        if (ret == false)
        {
            std::cout << "not file upload\n";
            res.status = 400;
            return;
        }
        const auto &file = req.get_file_value("file");
        res.body.clear();
        res.body = file.filename;
        res.body += "\n";
        res.body += file.content;
        res.set_header("Content-Type", "text/plain");
        res.status = 200;

        return;
    }

private:
    httplib::Server svr;
    int _server_port;
    std::string _server_ip;
};

int main()
{
    test svr;
    svr.run();

    return 0;
}

// void Hello(const httplib::Request &req, httplib::Response &res)
// {
//     // 对响应报文设置正文，text/plain：表示文本文件
//     res.set_content("Hello World!", "text/plain");
//     // 设置状态码
//     res.status = 200;
// }
// void Numbers(const httplib::Request &req, httplib::Response &res)
// {
//     auto num = req.matches[1]; // 数组0里存放的是整体path，往后下标保存的是捕捉的数据
//     res.set_content(num, "text/plain");
//     res.status = 200;
// }
// void Multipart(const httplib::Request &req, httplib::Response &res)
// {
//     auto ret = req.has_file("file");
//     if (ret == false)
//     {
//         std::cout << "not file upload\n";
//         res.status = 400;
//         return;
//     }
//     const auto &file = req.get_file_value("file");
//     res.body.clear();
//     res.body = file.filename;
//     res.body += "\n";
//     res.body += file.content;
//     res.set_header("Content-Type", "text/plain");
//     res.status = 200;

//     return;
// }
// int main()
// {
//     httplib::Server svr;   // 实例化以Server类的对象用于搭建服务器
//     svr.Get("/hi", Hello); // 注册一个针对/hi的Get请求的处理函数映射关系
//     svr.Get(R"(/numbers/(\d+))", Numbers);
//     svr.Post("/multipart", Multipart);
//     svr.listen("0.0.0.0", 8080);
//     return 0;
// }
